#ifndef OBTEIN_MINERAL_BEHAVIOUR_H
#define OBTEIN_MINERAL_BEHAVIOUR_H
#include "main.h"

#include "obtein_mineral_task.h"

#define clamp_init_stop_time 30000
#define clamp_init_time      80000

//xyz通道
#define CHASSIS_X_CHANNEL 1
#define CHASSIS_Y_CHANNEL 0
#define CHASSIS_Z_CHANNEL 4
#define CHASSIS_RC_DEADLINE 10    //遥控死区限制

#define RC_TO_CHASSIS_SPEED_SEN    6.60f

//遥控器前进摇杆（max 660）转化成车体前进速度（m/s）的比例
#define CHASSIS_VX_RC_SEN 0.006f    //0.006f
//遥控器左右摇杆（max 660）转化成车体左右速度（m/s）的比例
#define CHASSIS_VY_RC_SEN 0.005f    //0.005f
//遥控器旋转摇杆（max 660）转化成车体旋转速度（rad/s）的比例
#define CHASSIS_WZ_RC_SEN 0.006f    //0.006f
//底盘Z方向，鼠标
#define Z_MOUSE_SEN   0.02f

//底盘运动过程平稳前进速度（只按方向键）
#define NORMAL_MAX_CHASSIS_SPEED_X 50              //2.0f
//底盘运动过程平稳平移速度（只按方向键）
#define NORMAL_MAX_CHASSIS_SPEED_Y 50              //2.0f
//底盘运动过程最大前进速度（按住SHIFT）
#define DASH_MAX_CHASSIS_SPEED_X   100             //3.5f
//底盘运动过程最大平移速度（按住SHIFT）
#define DASH_MAX_CHASSIS_SPEED_Y   100             //3.5f
/**
* @brief          遥控器死区限制
*/
#define rc_deadband_limit(input, output, dealine)        \
    {                                                    \
        if ((input) > (dealine) || (input) < -(dealine)) \
        {                                                \
            (output) = (input);                          \
        }                                                \
        else                                             \
        {                                                \
            (output) = 0;                                \
        }                                                \
    }


typedef enum
{
	engineer_ZERO_FORCE = 0,
	engineer_INIT,                          //进入初始化模式
	engineer_CALI,                          //进入校准模式
	engineer_RELATIVE_ANGLE,                //遥控或者鼠标相对角度控制
	engineer_MOTIONsLESS,                   //不动静止
} engineer_behaviour_e;

typedef enum
{
	engineer_rescue = 0,
	engineer_obtein,
	engineer_exchange,

}engineer_work_e;

extern engineer_work_e engineer_work;

/**
  * @brief         工程行为状态机以及电机状态机设置
  * @param[out]     gimbal_mode_set: 数据指针
  * @retval         none
  */
extern void engineer_behaviour_mode_set(engineering_obtein_move_t* engineer_mode_set);
/**
  * @brief          工程行为控制，根据不同行为采用不同控制函数
  * @param[out]     add_yaw:设置的yaw角度增加值，单位 rad
  * @param[out]     add_pitch:设置的pitch角度增加值，单位 rad
  * @param[in]      gimbal_mode_set:云台数据指针
  * @retval         none
  */
extern void engineer_behaviour_control_set(fp32* translation, fp32* clamp, fp32* frc_x, fp32* frc_y, engineering_obtein_move_t* engineer_control_set);
/**
  * @brief          底盘行为控制，根据不同行为采用不同控制函数
  * @param[out]     add_yaw:设置的yaw角度增加值，单位 rad
  * @param[out]     add_pitch:设置的pitch角度增加值，单位 rad
  * @param[in]      gimbal_mode_set:云台数据指针
  * @retval         none
  */
extern void chassis_rc_control_set(engineering_obtein_move_t* chassis_control_set);



#endif // !OBTEIN_MINERAL_BEHAVIOUR_H


